package com.xcms.test;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
//import com.sun.image.codec.jpeg.JPEGCodec;
//import com.sun.image.codec.jpeg.JPEGImageEncoder;

@WebServlet( "/ValiCodeServlet")
public class ValiCodeServlet extends HttpServlet {
    private static final long serialVersionUID=-4798854254942306L;
    private static final char[] CHARS={'2','3','4','5','6','7','8','9','A','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R',
    'S','T','U','V','W','X','Y','Z'};
    public static Random random=new Random();
    public static String getRandomString(){
        StringBuffer buffer=new StringBuffer();
        for(int i=0;i<4;i++){
            buffer.append(CHARS[random.nextInt(CHARS.length)]);
        }
        return buffer.toString();
    }
    public static Color getRandomColor(){
        return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));
    }
    public static Color getReverseColor(Color c){
        return new Color(random.nextInt(255-c.getRed()),random.nextInt(255-c.getGreen()),random.nextInt(255-c.getBlue()));
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("image/jpeg");

        String randomString=getRandomString();
        //把当前验证码放到会话中
        request.getSession(true).setAttribute("vali",randomString);

        int width=80;
        int height=30;

        Color color=getRandomColor();
        Color reverse=getReverseColor(color);


        //创建图片
        BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        Graphics2D g=bi.createGraphics();
        g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));
        g.setColor(color);
        g.fillRect(0,0,width,height);
        g.setColor(reverse);
        g.drawString(randomString,18,20);
        for(int i=0,n=random.nextInt(100);i<n;i++){
            g.drawRect(random.nextInt(width),random.nextInt(height),1,1);
        }

        ServletOutputStream out=response.getOutputStream();

        ImageIO.write(bi, "jpg", out);

//        ServletOutputStream out=response.getOutputStream();
//        JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
//        encoder.encode(bi);
        out.flush();
    }
    public static void main(String args[]){
        System.out.println(getRandomString());
    }
}
